<?php
use frontend\modules\yii2\widgets\layouts\markdown\Markdown;
/* @var $this \yii\web\View */
$this->title = 'Security安全组件的学习和使用-Components组件';
$this->registerMetaTag([
    'name' => 'keywords',
    'content' => 'Security,安全,yii,yii2,框架,应用组件,Components,使用,教程'
]);
$this->registerMetaTag([
    'name' => 'description',
    'content' => 'Security组件给系统安全相关的功能提供了必要的基础设施。'
]);

$html = [
    "概述" => <<<HTML
# Security安全组件的使用
Security组件给系统安全相关的功能提供了必要的基础设施。

HTML,
    "config" => <<<HTML
## 配置举例 id=config
Security组件一般情况下不需要配置，按照默认的配置就足以保证安全性，如果硬是想配置，可以参考如下：
```php
[
    'components' => [
        'security' => [            
            'derivationIterations' => 1000000,
        ]
    ],
]
```

HTML,
    "compareString" => <<<HTML
## 字符串比较 id=compareString
比较两个字符串是否一致：
```php
// \$result = false
\$result = Yii::\$app->security->compareString("12", "1");

// \$result = true
\$result = Yii::\$app->security->compareString("1", "1");
```
HTML,
    "generateRandomString" => <<<HTML
## 产生随机字符串 id=generateRandomString
默认可以产生长度为32个字符的字符串：
```php
// \$result = "DFrQi_-7nnrvplsxQXlI5jv-XpTxDROJ"
\$result = Yii::\$app->security->generateRandomString();
```
HTML,
    "generatePasswordHash" => <<<HTML
## 产生加密哈希 id=generatePasswordHash
我们在数据库中保存的密码都是加密后的，而密码的加密需要一段哈希字符串：
```php
// \$result = "$2y$13\$aZn12Ad0iTyUlFhwd/dfDu0UTaYPfdrSxVSYcwkqR3NajfX7ElZKG"
\$result = Yii::\$app->security->generatePasswordHash('123456');
```
这个哈希值需要存储在数据库中，用于用户登录时的密码验证：
```shell
mysql> select * from user \G
*************************** 1. row ***************************
                  id: 1
            username: admin
            auth_key: 24-dfaF7ZwYoeCm5Qx4XCYhglXpWW2vb
       password_hash: $2y$13\$aZn12Ad0iTyUlFhwd/dfDu0UTaYPfdrSxVSYcwkqR3NajfX7ElZKG
password_reset_token: NULL
               email: admin@lvzmen.com
              status: 10
          created_at: 1639545075
          updated_at: 1639545075
  verification_token: NULL
```
HTML,
    "validatePassword" => <<<HTML
## 密码验证 id=validatePassword
Security提供了一个方法（`validatePassword()`）用于验证登录密码，不过需要上节中的哈希来协助：
```php
\$result = Yii::\$app->security->validatePassword('123456', '$2y$13\$aZn12Ad0iTyUlFhwd/dfDu0UTaYPfdrSxVSYcwkqR3NajfX7ElZKG');
```
哈希字符串应该从数据库中读取。
HTML,
    "" => <<<HTML

HTML,
];

//var_dump(Yii::$app->security->generateRandomKey());die;
echo Markdown::widget(["content" => implode("\n", $html)]);

